#include <iostream>
#include <sstream>
#include <string>
#include <memory>
#include <jsoncpp/json/json.h>
#include "LogUtil.hpp"

class JsonUtil
{
public:
    // 实现数据的序列化
    static bool serialize(const Json::Value &val, std::string &body)
    {
        std::stringstream ss;
        // 先实例化⼀个⼯⼚类对象
        Json::StreamWriterBuilder swb;
        // 通过⼯⼚类对象来⽣产派⽣类对象
        std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
        int ret = sw->write(val, &ss);
        if (ret != 0)
        {
            ELOG("json serialize failed!");
            return false;
        }
        body = ss.str();
        return true;
    }
    // 实现json字符串的反序列化
    static bool unserialize(const std::string &body, Json::Value &val)
    {
        // 实例化⼯⼚类对象
        Json::CharReaderBuilder crb;
        // ⽣产CharReader对象
        std::string errs;
        std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
        bool ret = cr->parse(body.c_str(), body.c_str() + body.size(), &val,
                             &errs);
        if (ret == false)
        {
            ELOG("json unserialize failed :%s ", errs.c_str());
            return false;
        }
        return true;
    }
};